/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * descripteurcas.java
 *
 * Created on 3 juin 2011, 10:27:16
 */
package cbrtator;

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JTextField;

import org.jdesktop.application.Action;
import rapc.CaseDescripteur;
import rapc.cas;
import rapc.descripteur;

/**
 *
 * @author rikoukiki
 */
public class descripteurcas extends javax.swing.JPanel {

    //liste de cas
    private ArrayList<cas> listecas = new ArrayList<cas>();
    
    //liste de descrypteur
    private ArrayList<descripteur> ldescripteur = new ArrayList<descripteur>();
    
    //les valeurs d'un cas
    private ArrayList<String> valeurscas;
    
    private ArrayList<JTextField> attributs;
    private  Component[] liste;

    private Component[] ContenuCas;

    private int idCas;
    /** Creates new form descripteurcas */
    public descripteurcas() {
         
        initComponents();
       
    }
    
    public descripteurcas(final ArrayList<descripteur> ldescripteur ,ArrayList<cas> listecas)
    {
        idCas = 0;
        this.ldescripteur = ldescripteur;
        this.listecas = listecas;
        attributs = new ArrayList<JTextField>();
        initComponents();
        
        //tableau contenant la liste des poids
        this.liste = new Component[ldescripteur.size()];    
        int i = 0;
        for ( i=0 ; i < ldescripteur.size(); i++) {           

            //label contenant le nom du descripteur
            JLabel  lab = new JLabel(ldescripteur.get(i).getNom() + " : ");
            lab.setBounds(30, i * 30, 100, 20);
            
            //ajout du textfield ontenant les poids dans l'ordre
            System.out.println(ldescripteur.get(i).getType());
            if(ldescripteur.get(i).getType().equals("boolean")){
                System.out.println("dans bool");
                liste[i] =  new JCheckBox("Vrai / Faux");
            }
            else
            {
                liste[i] =  new JTextField(); 
            }
            
            liste[i].setBounds(130, i * 30, 150, 20);
          

            PcontentDescriptor.add(liste[i]);
            PcontentDescriptor.add(lab);
            PcontentDescriptor.repaint();
            
            
        }
        
    }

   @Action
    public void enregistrecas()
    {        
        String valeur;
        cas cas;
        
        
        valeurscas = new ArrayList<String>();
        cas = new cas();
        
        for ( int i=0 ; i < ldescripteur.size(); i++) {
            
            cas.addDescripteur(ldescripteur.get(i));
            
            if(liste[i].getClass()==javax.swing.JCheckBox.class)
            {
               //converti un booléen en string 
               valeur= Boolean.valueOf(
                       ((javax.swing.JCheckBox)liste[i]).isSelected())
                       .toString();                                                    
            
            }
            else
            {
                //alors c'est une texbox juste a recuperer ça valeur;
                valeur = ((javax.swing.JTextField)liste[i]).getText();  
            }
            valeurscas.add(valeur);
           
        }     
        
        cas.addListeCas(valeurscas);
        listecas.add(cas);
   /* JList test = new  JList();
    test.add(test);*/
    }


    

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        navigatedescripteur = new javax.swing.JPanel();
        Bchaine = new javax.swing.JButton();
        PcontentDescriptor = new javax.swing.JPanel();
        Contentdesctipteur = new javax.swing.JPanel();
        precedant = new java.awt.Button();
        suivant = new java.awt.Button();
        affichageCas = new javax.swing.JPanel();

        setName("Form"); // NOI18N

        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(cbrtator.CbrtatorApp.class).getContext().getResourceMap(descripteurcas.class);
        navigatedescripteur.setBorder(javax.swing.BorderFactory.createTitledBorder(resourceMap.getString("navigatedescripteur.border.title"))); // NOI18N
        navigatedescripteur.setName("navigatedescripteur"); // NOI18N

        javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(cbrtator.CbrtatorApp.class).getContext().getActionMap(descripteurcas.class, this);
        Bchaine.setAction(actionMap.get("enregistrecas")); // NOI18N
        Bchaine.setText(resourceMap.getString("Bchaine.text")); // NOI18N
        Bchaine.setName("Bchaine"); // NOI18N

        PcontentDescriptor.setName("PcontentDescriptor"); // NOI18N

        javax.swing.GroupLayout PcontentDescriptorLayout = new javax.swing.GroupLayout(PcontentDescriptor);
        PcontentDescriptor.setLayout(PcontentDescriptorLayout);
        PcontentDescriptorLayout.setHorizontalGroup(
            PcontentDescriptorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 401, Short.MAX_VALUE)
        );
        PcontentDescriptorLayout.setVerticalGroup(
            PcontentDescriptorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 204, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout navigatedescripteurLayout = new javax.swing.GroupLayout(navigatedescripteur);
        navigatedescripteur.setLayout(navigatedescripteurLayout);
        navigatedescripteurLayout.setHorizontalGroup(
            navigatedescripteurLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(navigatedescripteurLayout.createSequentialGroup()
                .addGroup(navigatedescripteurLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(navigatedescripteurLayout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(Bchaine))
                    .addComponent(PcontentDescriptor, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
        navigatedescripteurLayout.setVerticalGroup(
            navigatedescripteurLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, navigatedescripteurLayout.createSequentialGroup()
                .addComponent(PcontentDescriptor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 91, Short.MAX_VALUE)
                .addComponent(Bchaine))
        );

        Contentdesctipteur.setBorder(javax.swing.BorderFactory.createTitledBorder(resourceMap.getString("Contentdesctipteur.border.title"))); // NOI18N
        Contentdesctipteur.setName("Contentdesctipteur"); // NOI18N

        precedant.setActionCommand(resourceMap.getString("precedant.actionCommand")); // NOI18N
        precedant.setLabel(resourceMap.getString("precedant.label")); // NOI18N
        precedant.setName("precedant"); // NOI18N
        precedant.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                precedantActionPerformed(evt);
            }
        });

        suivant.setActionCommand(resourceMap.getString("suivant.actionCommand")); // NOI18N
        suivant.setLabel(resourceMap.getString("suivant.label")); // NOI18N
        suivant.setName("suivant"); // NOI18N
        suivant.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                suivantActionPerformed(evt);
            }
        });

        affichageCas.setName("affichageCas"); // NOI18N

        javax.swing.GroupLayout affichageCasLayout = new javax.swing.GroupLayout(affichageCas);
        affichageCas.setLayout(affichageCasLayout);
        affichageCasLayout.setHorizontalGroup(
            affichageCasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 345, Short.MAX_VALUE)
        );
        affichageCasLayout.setVerticalGroup(
            affichageCasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 291, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout ContentdesctipteurLayout = new javax.swing.GroupLayout(Contentdesctipteur);
        Contentdesctipteur.setLayout(ContentdesctipteurLayout);
        ContentdesctipteurLayout.setHorizontalGroup(
            ContentdesctipteurLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(ContentdesctipteurLayout.createSequentialGroup()
                .addComponent(precedant, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 227, Short.MAX_VALUE)
                .addComponent(suivant, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addGroup(ContentdesctipteurLayout.createSequentialGroup()
                .addGap(12, 12, 12)
                .addComponent(affichageCas, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(12, 12, 12))
        );
        ContentdesctipteurLayout.setVerticalGroup(
            ContentdesctipteurLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, ContentdesctipteurLayout.createSequentialGroup()
                .addComponent(affichageCas, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(ContentdesctipteurLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(precedant, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(suivant, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(Contentdesctipteur, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(navigatedescripteur, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(17, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(navigatedescripteur, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(Contentdesctipteur, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
    }// </editor-fold>//GEN-END:initComponents



    private void suivantActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_suivantActionPerformed
        // TODO add your handling code here:
        affichageCas.removeAll();
        attributs.clear();
        if (idCas < listecas.size()){
            JLabel  lab = new JLabel("Cas n°"+idCas);            
            affichageCas.add(lab);
            lab.setBounds(5,10,(int) (affichageCas.getWidth()*0.5), 10);
            cas c = listecas.get(idCas);
            for(int i = 0 ; i < c.getDescripteurCase().size() ;i++){
                Component comp = new JLabel(c.getDescripteur().get(i).getNom()+ " : ");
                comp.setBounds(5,25*(i+2),(int) (affichageCas.getWidth()*0.65), 25);
                affichageCas.add(comp);
                JTextField mp = new JTextField(c.getDescripteurCase().get(i));
                mp.setBounds((int) (affichageCas.getWidth()-(affichageCas.getWidth()*0.3)),25*(i+2),(int) (affichageCas.getWidth()*0.3), 25);
                affichageCas.add(mp);
                attributs.add(mp);
            }
            if (idCas+1 < listecas.size()) idCas++;
            
            /*affichage du cas dans le panel*/
            
            JButton Enregistrer = new JButton("Enregistrer");
            Enregistrer.addActionListener( new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    for(int i = 0 ; i < attributs.size(); i++){
                        listecas.get(idCas).getDescripteurCase().set(i, attributs.get(i).getText());
                    }
                }
        });
            Enregistrer.setBounds( (int)(affichageCas.getWidth()-(affichageCas.getWidth()*0.3)),10 ,(int) (affichageCas.getWidth()*0.3), 25);
            affichageCas.add(Enregistrer);
            affichageCas.repaint();
            
            
        }
    }//GEN-LAST:event_suivantActionPerformed

    private void precedantActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_precedantActionPerformed
        // TODO add your handling code here:
        System.out.println(idCas);
        affichageCas.removeAll();
        if (idCas >= 0){
            JLabel  lab = new JLabel("Cas n°"+idCas);
            affichageCas.add(lab);
            lab.setBounds(5,10,(int) (affichageCas.getWidth()*0.5), 10);
            cas c = listecas.get(idCas);
            for(int i = 0 ; i < c.getDescripteurCase().size() ;i++){
                Component comp = new JLabel(c.getDescripteur().get(i).getNom() + " : ");
                comp.setBounds(5,25*(i+2),(int) (affichageCas.getWidth()*0.5), 25);
                affichageCas.add(comp);
                JTextField mp = new JTextField(c.getDescripteurCase().get(i));
                mp.setBounds((int) (affichageCas.getWidth()-(affichageCas.getWidth()*0.3)),25*(i+2),(int) (affichageCas.getWidth()*0.3), 25);
                affichageCas.add(mp);
                attributs.add(mp);
            }
            if (idCas >0) idCas--;

            JButton Enregistrer = new JButton("Enregistrer");
            Enregistrer.addActionListener( new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    for(int i = 0 ; i < attributs.size(); i++){
                        listecas.get(idCas).getDescripteurCase().set(i, attributs.get(i).getText());
                    }
                }
        });
            Enregistrer.setBounds( (int)(affichageCas.getWidth()-(affichageCas.getWidth()*0.3)),10 ,(int) (affichageCas.getWidth()*0.3), 25);
            affichageCas.add(Enregistrer);
            /*affichage du cas dans le panel*/
            affichageCas.repaint();
    }//GEN-LAST:event_precedantActionPerformed
   }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton Bchaine;
    private javax.swing.JPanel Contentdesctipteur;
    private javax.swing.JPanel PcontentDescriptor;
    private javax.swing.JPanel affichageCas;
    private javax.swing.JPanel navigatedescripteur;
    private java.awt.Button precedant;
    private java.awt.Button suivant;
    // End of variables declaration//GEN-END:variables
}
